/**
 * 编辑器状态管理
 * 管理文件打开、聚焦等UI状态
 */
import editorManager from '../utils/editorManager';

export class EditorState {
  constructor(options = {}) {
    this.currentFileId = options.currentFileId || null; // 当前聚焦的文件ID
    this.openedFileIds = options.openedFileIds || []; // 已打开的文件ID列表
    this.fs = options.fs || null; // 文件系统引用
  }

  /**
   * 设置文件系统引用
   */
  setFileSystem(fs) {
    this.fs = fs;
  }

  /**
   * 获取文件信息
   */
  getFile(fileId) {
    return this.fs ? this.fs.getItem(fileId) : null;
  }

  /**
   * 设置当前聚焦的文件
   */
  setCurrentFile(fileId) {
    if (this.fs) {
      const file = this.fs.getItem(fileId);
      if (file) {
        this.currentFileId = fileId;
        // 如果文件不在已打开列表中，添加到列表中
        if (!this.openedFileIds.includes(fileId)) {
          this.openedFileIds.push(fileId);
        }
        
        return true;
      }
    }
    return false;
  }

  /**
   * 加载当前文件内容到编辑器
   */
  async loadCurrentFileToEditor() {
    if (!this.currentFileId || !this.fs) {
      console.warn('没有当前文件或文件系统');
      return false;
    }

    const file = this.fs.getItem(this.currentFileId);
    if (!file) {
      console.warn('当前文件不存在:', this.currentFileId);
      return false;
    }

    // 检查是否为文件夹
    if (file.type === 'directory') {
      console.warn('不能加载文件夹内容到编辑器:', file.name);
      return false;
    }

    // 检查是否为文件对象
    if (file.type !== 'file') {
      console.warn('当前项目不是文件对象:', file);
      return false;
    }

    try {
      const content = await file.getContent('text');
      editorManager.setValue(content || '');
      return true;
    } catch (error) {
      console.error('加载文件内容失败:', error);
      return false;
    }
  }

  /**
   * 获取当前聚焦的文件
   */
  getCurrentFile() {
    const file = this.currentFileId ? this.getFile(this.currentFileId) : null;
    return file;
  }

  /**
   * 打开文件（添加到已打开列表）
   */
  openFile(fileId) {
    if (this.fs && this.fs.getItem(fileId) && !this.openedFileIds.includes(fileId)) {
      this.openedFileIds.push(fileId);
      return true;
    }
    return false;
  }

  /**
   * 关闭文件（从已打开列表中移除）
   */
  closeFile(fileId) {
    const index = this.openedFileIds.indexOf(fileId);
    if (index > -1) {
      this.openedFileIds.splice(index, 1);
      // 如果关闭的是当前聚焦的文件，需要重新设置聚焦文件
      if (this.currentFileId === fileId) {
        this.currentFileId = this.openedFileIds.length > 0 ? this.openedFileIds[this.openedFileIds.length - 1] : null;
      }
      return true;
    }
    return false;
  }

  /**
   * 获取已打开的文件列表
   */
  getOpenedFiles() {
    return this.openedFileIds.map(fileId => this.getFile(fileId)).filter(file => file !== null);
  }

  /**
   * 检查文件是否已打开
   */
  isFileOpened(fileId) {
    return this.openedFileIds.includes(fileId);
  }

  /**
   * 检查文件是否是当前聚焦的文件
   */
  isCurrentFile(fileId) {
    return this.currentFileId === fileId;
  }

  /**
   * 获取当前聚焦文件的ID
   */
  getCurrentFileId() {
    return this.currentFileId;
  }

  /**
   * 获取已打开文件的ID列表
   */
  getOpenedFileIds() {
    return [...this.openedFileIds];
  }

  /**
   * 序列化为JSON
   */
  toJSON() {
    return {
      currentFileId: this.currentFileId,
      openedFileIds: this.openedFileIds
    };
  }

  /**
   * 从JSON反序列化
   */
  static fromJSON(json) {
    return new EditorState({
      currentFileId: json.currentFileId,
      openedFileIds: json.openedFileIds || []
    });
  }
}
